
package br.com.aeternu.controleatendimento.atendimento;

import java.awt.Frame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import br.com.aeternu.controleatendimento.atendimento.ui.IfcUIFormAtendimento;
import br.com.aeternu.controleatendimento.atendimento.ui.UIFormAtendimento;
import br.com.aeternu.controleatendimento.excel.atendimento.AtendimentoBean;
import br.com.aeternu.controleatendimento.excel.conclusao.ConclusaoBean;
import br.com.aeternu.controleatendimento.excel.conclusao.ExcelConclusao;
import br.com.aeternu.controleatendimento.excel.empresa.EmpresaBean;
import br.com.aeternu.controleatendimento.excel.empresa.EmpresaBean.TipoEmpresa;
import br.com.aeternu.controleatendimento.excel.empresa.ExcelEmpresa;
import br.com.aeternu.controleatendimento.excel.medico.ExcelMedico;
import br.com.aeternu.controleatendimento.excel.medico.MedicoBean;
import br.com.aeternu.controleatendimento.excel.tipoexame.ExcelTipoExame;
import br.com.aeternu.controleatendimento.excel.tipoexame.TipoExameBean;
import br.com.aeternu.controleatendimento.excel.turno.ExcelTurno;
import br.com.aeternu.controleatendimento.excel.turno.TurnoBean;
import br.com.aeternu.controleatendimento.exception.ControleAtendimentoException;

public class FormAtendimento implements IfcUIFormAtendimento
{

   private IfcFormAtendimento listener;
   private Frame parent;

   public FormAtendimento(Frame parent, IfcFormAtendimento listener) throws ControleAtendimentoException
   {
      this.listener = listener;
      this.parent = parent;

      UIFormAtendimento uiFormAtendimento = new UIFormAtendimento(this);
      carregaTela(uiFormAtendimento);
   }

   @Override
   public void confirmar(UIFormAtendimento ui)
   {
      Date dataDoAtendimento = ui.getDataDoAtendimento().getDate();
      String turno = (String) ui.getTurno().getSelectedItem();
      String medico = (String) ui.getMedico().getSelectedItem();
      String paciente = ui.getPaciente().getText();
      String tipoExame = (String) ui.getTipoExame().getSelectedItem();
      String coordenacao = (String) ui.getCoordenacao().getSelectedItem();
      String parceira = (String) ui.getParceira().getSelectedItem();
      String particular = (String) ui.getParticular().getSelectedItem();
      String conclusao = (String) ui.getConclusao().getSelectedItem();
      int qtde = (ui.getDias().getText().isEmpty() ? 0 : Integer.parseInt(ui.getDias().getText()));

      AtendimentoBean bean = new AtendimentoBean();
      bean.setDataAtendimento(dataDoAtendimento);
      bean.setTurno(turno);
      bean.setMedico(medico);
      bean.setPaciente(paciente);
      bean.setTipoDeExame(tipoExame);
      bean.setCoordenacao(coordenacao);
      bean.setEmpresaParceira(parceira);
      bean.setParticular(particular);
      bean.setConclusaoPendencia(conclusao);
      bean.setQuantidade(qtde);

      listener.incluirRegistro(parent, bean);

      ui.dispose();
   }

   private void carregaTela(UIFormAtendimento ui) throws ControleAtendimentoException
   {
      ui.getTurno().setModel(getTurnos());
      ui.getMedico().setModel(getMedicos());
      ui.getTipoExame().setModel(getTiposExames());
      ui.getCoordenacao().setModel(getCoordenacoes());
      ui.getParceira().setModel(getEmpresasParceiras());
      ui.getParticular().setModel(getParticulares());
      ui.getConclusao().setModel(getConclusoes());
      ui.getDias().setText("0");
   }

   private DefaultComboBoxModel<String> getConclusoes() throws ControleAtendimentoException
   {
      ExcelConclusao excel = new ExcelConclusao();
      List<ConclusaoBean> conclusaoBeanList = excel.obterRegistros();
      Collections.sort(conclusaoBeanList);

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (ConclusaoBean bean : conclusaoBeanList)
         model.addElement(bean.getConclusao());

      return model;
   }

   private DefaultComboBoxModel<String> getCoordenacoes() throws ControleAtendimentoException
   {
      ExcelEmpresa excel = new ExcelEmpresa();
      List<EmpresaBean> empresaBeanList = excel.obterRegistros();
      List<EmpresaBean> coordenacaoBeanList = new ArrayList<EmpresaBean>();

      for (EmpresaBean bean : empresaBeanList)
      {
         if (bean.getTipo().equals(TipoEmpresa.COORDENACAO))
         {
            coordenacaoBeanList.add(bean);
         }
      }
      Collections.sort(coordenacaoBeanList);

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (EmpresaBean bean : coordenacaoBeanList)
      {
         model.addElement(bean.getEmpresa());
      }

      return model;
   }

   private DefaultComboBoxModel<String> getEmpresasParceiras() throws ControleAtendimentoException
   {
      ExcelEmpresa excel = new ExcelEmpresa();
      List<EmpresaBean> empresaBeanList = excel.obterRegistros();
      List<EmpresaBean> parceiraBeanList = new ArrayList<EmpresaBean>();

      for (EmpresaBean bean : empresaBeanList)
      {
         if (bean.getTipo().equals(TipoEmpresa.PARCEIRA))
         {
            parceiraBeanList.add(bean);
         }
      }
      Collections.sort(parceiraBeanList);

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (EmpresaBean bean : parceiraBeanList)
      {
         model.addElement(bean.getEmpresa());
      }

      return model;
   }

   private DefaultComboBoxModel<String> getMedicos() throws ControleAtendimentoException
   {
      ExcelMedico excel = new ExcelMedico();
      List<MedicoBean> medicoBeanList = excel.obterRegistros();
      Collections.sort(medicoBeanList);

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (MedicoBean bean : medicoBeanList)
         model.addElement(bean.getNome());

      return model;
   }

   private DefaultComboBoxModel<String> getParticulares() throws ControleAtendimentoException
   {
      ExcelEmpresa excel = new ExcelEmpresa();
      List<EmpresaBean> empresaBeanList = excel.obterRegistros();
      List<EmpresaBean> particularBeanList = new ArrayList<EmpresaBean>();

      for (EmpresaBean bean : empresaBeanList)
      {
         if (bean.getTipo().equals(TipoEmpresa.PARTICULAR))
         {
            particularBeanList.add(bean);
         }
      }
      Collections.sort(particularBeanList);

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (EmpresaBean bean : particularBeanList)
      {
         model.addElement(bean.getEmpresa());
      }

      return model;
   }

   private DefaultComboBoxModel<String> getTiposExames() throws ControleAtendimentoException
   {
      ExcelTipoExame excel = new ExcelTipoExame();
      List<TipoExameBean> tipoExameBeanList = excel.obterRegistros();
      Collections.sort(tipoExameBeanList);

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (TipoExameBean bean : tipoExameBeanList)
         model.addElement(bean.getTipoExame());

      return model;
   }

   private DefaultComboBoxModel<String> getTurnos() throws ControleAtendimentoException
   {
      ExcelTurno excel = new ExcelTurno();
      List<TurnoBean> beanList = excel.obterRegistros();

      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
      model.addElement("");
      for (TurnoBean bean : beanList)
         model.addElement(bean.getTurno().getValue());

      return model;
   }
}
